package com.ccp.dev.workflow.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.workflow.model.ProcessExecution;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ExecutionDao extends IBaseMapper<ProcessExecution,String> {

    /**
     * 根据实例id和变量名称删除流程变量
     * @param procInstId 流程实例id
     * @param name 变量名称
     */
    void delVarByInstIdAndVarName(@Param("procInstId") String procInstId, @Param("name") String name);

    /**
     * 根据流程实例id删除流程变量
     * @param procInstId 流程实例id
     */
    void delVariableByProcInstId(String procInstId);

    /**
     * 根据执行流id删除执行流
     * @param executionId 执行流id
     */
    void delExecutionById(String executionId);

    /**
     * 根据流程实例ID删除所有执行流
     * @param procInstId 流程实例id
     */
    void delExecutionByProcInstId(String procInstId);

    /**
     * 根据流程实例Id删除子执行流
     * @param procInstId 流程实例id
     */
    void delSubExecutionByProcInstId(String procInstId);

    /**
     * 根据父执行流Id删除子执行流
     * @param parentId 父执行流id
     */
    void delSubExecutionByParentId(String parentId);

    /**
     * 删除子流程实例的流程变量
     * @param procInstId
     */
    void delSubVarByProcInstId(String procInstId);

    /**
     * 根据流程变量里的token变量
     * @param taskId
     * @param token
     */
    void delTokenVarByTaskId(@Param("taskId") String taskId,@Param("name") String token);

    /**
     * 根据执行流id删除变量
     * @param executionId
     */
    void delVarsByExecutionId(String executionId);

    /**
     * 更新执行流的当前节点
     * @param executionId
     * @param actId
     */
    void updateActId(@Param("executionId") String executionId, @Param("actId") String actId);

    /**
     * 更新主线程的执行为当前节点
     * @param executionId
     * @param nodeId
     */
    void updateMainThread(@Param("executionId") String executionId, @Param("nodeId") String nodeId);

    /**
     * 根据流程实例id获取所有子执行流
     * @param procInstId 流程实例id
     * @return list 子执行流列表
     */
    List<ProcessExecution> getSubExecutionByProcInstId(String procInstId);

    /**
     * 获取子执行流
     * @param subProcInstId
     * @return
     */
    List<ProcessExecution> getSubExecutionBySuperId(String subProcInstId);
}
